#pragma once
#include "common.hpp"
#include <set>
#include "InetAddr.hpp"
class CMD
{
public:
    CMD()
    {
        _WhiteList.insert("ls");
        _WhiteList.insert("whoami");
        _WhiteList.insert("pwd");
        _WhiteList.insert("ps");
        _WhiteList.insert("ls -l");
        _WhiteList.insert("touch hh.txt");
    }

    std::string Excute(const std::string& cmd,InetAddr& peer)
    {
        if(!_WhiteList.count(cmd))
        {
            return std::string("坏人");
        }

        FILE* p = popen(cmd.c_str(),"r");//创建一个子进程来执行指定的 shell 命令，并返回一个文件指针
        if(p == nullptr)
        {
            return std::string("你输入的指令不存在");
        }

        char line[1024];
        std::string str;
        while(fgets(line,sizeof(line),p))
        {
            str += line; 
        }
        std::string result = peer.StringAddr() + "输入了指令 : " + str;
        return result;
    }

private:
    std::set<std::string> _WhiteList; 
};